#ifndef DIRECTORIO_H_
#define DIRECTORIO_H_

#include <vector>

#include "Archivo.h"
#include "Cuba.h"

using namespace std;

namespace Toolkit
{

class Directorio
{
public:

	/*
	 * Constructor para construir un directorio desde el cero.
	 */
	Directorio(const unsigned long int &posicionPrimerBloque,
			   const string &ruta, const string &nombre);

	/*
	 * Constructor para recuperar un directorio ya existente.
	 */
	Directorio(const string &ruta, const string &nombre);

	virtual ~Directorio();

	void expandir();

	bool intentarContraer();

	unsigned long int obtenerPosicionCuba(long int direccionDirectorio) const;

	bool buscarCompaneroCuba(const Cuba &cuba, long int &posicionCompanero) const;

	unsigned long int getProfundidad() const;

	void agregar(const unsigned long int &dato, const long int &posicionDirectorio);

	void actualizar(const unsigned long int posicionNueva, const unsigned long int inicio,
					const unsigned long int fin);

	/*
	 * El metodo devuelve la cantidad de registros que apuntan a la cuba.
	 */
	unsigned int cantidadRegistros(const Cuba &cuba) const;

private:

	void persistir();

	void recuperar();

	bool tieneCompanero(const Cuba &cuba) const;

	bool puedoContraer() const;

	void recuperarProfundidad();

	void persistirProfundidad();

	unsigned int getCantidadElementos() const;

	Archivo *almacenamiento;

	unsigned int profundidad;

	vector<unsigned long int> directorio;
};

}

#endif /* DIRECTORIO_H_ */
